package modelo.bonus;

import java.awt.Rectangle;

import vista.tanque.VistaAlgoTank;

import ar.uba.fi.algo3.titiritero.ControladorJuego;
import ar.uba.fi.algo3.titiritero.ObjetoVivo;
import ar.uba.fi.algo3.titiritero.Posicionable;

import modelo.Contenedor;
import modelo.Posicion;
import modelo.Vector;
import modelo.estatico.Estatico;
import modelo.tanque.AlgoTank;

public abstract class Bonus implements Estatico, Posicionable, ObjetoVivo {
	
	protected Posicion posicion;
	private  int ancho = 16;
	private int alto = 16;
	private boolean usado;
	private int cicloDeVida;
	//este numero es para que en ese ciclo, desaparezca el bonus
	private int maxCicloBonus = 100;

	public Bonus(Posicion p){
		posicion = p;
		usado = false;
		cicloDeVida = 0;
	}
	
	public Bonus(Posicion p, int cicloDeVida){
		posicion = p;
		usado = false;
		cicloDeVida = cicloDeVida;
	}
	
	public Rectangle getBordes() {
		return new Rectangle(this.posicion.getX(),this.posicion.getY(),this.getAncho(),this.getAlto());
	}
	
	public void vivir() {
		cicloDeVida++;
		if (cicloDeVida > maxCicloBonus){
			usado = true;
		}
	}
	
	public int getAncho() {
		return this.ancho;
	}
	public int getAlto() {
		return this.alto;
	}
	public abstract void afectarTanque(AlgoTank algoTank);

	public int getX(){
		return this.posicion.getX();
	}
	
	public int getY(){
		return this.posicion.getY();
	}
	
	public int getIntensidadDeRebote(){
		return 0;
	}
	
	public Vector getDireccion(){
		return new Vector(0, 0);
	}

	public void usar() {
		this.usado = true;
		
	}

	public boolean usado() {
		return usado;
	}
	public abstract void agregarseAListas();

	public int getCicloDeVida() {
		return cicloDeVida;
	}
}